<!doctype html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport"
        content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Layout</title>
  <style>
    html * {
      padding: 0;
      margin: 0;
    }

    .layout {
      margin-bottom: 20px;
    }

    .layout article div {
      min-height: 100px;
    }
  </style>
</head>
<body>
<section class="layout float">
  <style media="screen">
    .layout.float .left {
      float: left;
      width: 300px;
      background: red;
    }

    .layout.float .right {
      float: right;
      width: 300px;
      background: blue;
    }

    .layout.float .center {
      background: aqua;
    }
  </style>
  <article class="left-right-center">
    <div class="left"></div>
    <div class="right"></div>
    <div class="center">
      <h1>浮动解决方案</h1>
      1.这是三栏布局中间部分
      1.这是三栏布局中间部分
      1.这是三栏布局中间部分
    </div>
  </article>
</section>

<section class="layout absolute">
  <style>
    .layout.absolute .left-right-center > div {
      position: absolute;
    }

    .layout.absolute .left {
      left: 0;
      width: 300px;
      background: red;
    }

    .layout.absolute .right {
      right: 0;
      width: 300px;
      background: blue;
    }

    .layout.absolute .center {
      right: 300px;
      left: 300px;
      background: yellow;
    }
  </style>
  <article class="left-right-center">
    <div class="left"></div>
    <div class="center">
      <h1>定位解决方案</h1>
      1.这是三栏布局中间部分
      1.这是三栏布局中间部分
      1.这是三栏布局中间部分
    </div>
    <div class="right"></div>
  </article>
</section>

<section class="layout flexbox">
  <style>
    .layout.flexbox {
      margin-top: 140px;
    }

    .layout.flexbox .left-center-right {
      display: flex;
    }

    .layout.flexbox .left {
      width: 300px;
      background: red;
    }

    .layout.flexbox .center {
      flex: 1;
      background: yellow;
    }

    .layout.flexbox .right {
      width: 300px;
      background: blue;
    }
  </style>
  <article class="left-center-right">
    <div class="left"></div>
    <div class="center">
      <h1>flexbox解决方案</h1>
      1.这是三栏布局中间部分
      1.这是三栏布局中间部分
      1.这是三栏布局中间部分
    </div>
    <div class="right"></div>
  </article>
</section>

<section class="layout table">
  <style>
    .layout.table .left-center-right {
      width: 100%;
      height: 100px;
      display: table;
    }

    .layout.table .left-center-right > div {
      display: table-cell
    }

    .layout.table .left {
      width: 300px;
      background: red;
    }

    .layout.table .center {
      background: yellow;
    }

    .layout.table .right {
      width: 300px;
      background: blue;
    }
  </style>
  <article class="left-center-right">
    <div class="left"></div>
    <div class="center">
      <h1>table解决方案</h1>
      1.这是三栏布局中间部分
      1.这是三栏布局中间部分
      1.这是三栏布局中间部分
    </div>
    <div class="right"></div>
  </article>
</section>

<section class="layout grid">
  <style>
    .layout.grid .left-center-right {
      display: grid;
      grid-template-rows: 100px;
      grid-template-columns: 300px auto 300px;
      width: 100%;
      height: 100px;
    }

    .layout.grid .left {
      background: red;
    }

    .layout.grid .center {
      background: yellow;
    }

    .layout.grid .right {
      background: blue;
    }
  </style>
  <article class="left-center-right">
    <div class="left"></div>
    <div class="center">
      <h1>grid解决方案</h1>
      1.这是三栏布局中间部分
      1.这是三栏布局中间部分
      1.这是三栏布局中间部分
    </div>
    <div class="right"></div>
  </article>
</section>

<!--思考每个方案的优缺点
  float: 需要清浮动， 兼容性比较好
  position: 已经脱离文档流，下面的元素也需要脱离文档流。 布局快速
  flexbox: 主要解决以上两个布局问题，比较完美，移动端主流
  table: 兼容性比较好， ie8兼容， 高度超出之后， 也需要设置另外高度
  grid: 代码量简化
-->

<!--
  页面布局的变通
    三栏布局
      左右宽度固定，中间自适应
      上下高度固定，中间自适应（使用于移动端）
    两栏布局
      左宽度固定，右自适应
      右宽度固定，左自适应
      上高度固定，下自适应
      下高度固定，上自适应
-->
</body>
</html>
